<?php  
require_once('../zAPI/properties.inc.php');
require_once( ROOT_CLASS . 'Kernel.class.php');
require_once( $kernel->getClass("Util") );
require_once( $kernel->getClass("BusinessObject") );
require_once( ROOT_CLASS . 'DataObject/FuncionarioDO.class.php');
require_once( ROOT_CLASS . 'DataObject/PessoaDO.class.php');
require_once( ROOT_DATA_OBJECT . 'DataObject.class.php');
require_once( ROOT_CLASS . 'zAccess/zAccess.class.php' );
?>

<?php 

class FuncionarioController{
	
	function __construct(){
		$AccessAction = new AccessAction();
		$AccessAction->validSessionUsuario();
    }	
	
	function listarFuncionarios($instanceDB, $postRequest, $getRequest){	
		
		$limit = $_POST["limit"]; // varíável usada para controlar o limite de paginação
		$start = $_POST["start"]; // varíável usada para controlar o início de paginação
		$filter = $_POST["query"];
		
		$funcionarioBO = new FuncionarioBO();
		
		$result = $funcionarioBO->listarFuncionarios($instanceDB, $limit, $start, $filter);
		
		
		$retorno = "{";
			$retorno .= "success:true,";
			$dados = "";
			$aux = "";
			for ($i = 0; $i < count($result["object"]); $i++){
				$dados .= $aux . utf8_encode( $result["object"][$i]->transformDataObjectToJSON() );
				$aux = ",";
			}
			$retorno .= "results:".$result["qtdRegistros"].",";
			$retorno .= "message:'Funcionários listados com sucesso',";
			$retorno .= "elements:[" . $dados . "]";
		$retorno .= "}";
		
		return $retorno;
		
	}

	function inserir($instanceDB, $postRequest, $getRequest){
	
		$funcionarioBO = new FuncionarioBO();
		$pessoaBO = new PessoaBO();
		
		$funcionarioDO = new FuncionarioDO();
		$pessoaDO = new PessoaDO();
		
		$funcionarioDO->loadDataObjectByPost( $_POST, TRUE );
		$pessoaDO->loadDataObjectByPost( $_POST, TRUE );
		
		$result = $pessoaBO->inserir($instanceDB, $pessoaDO);
		$funcionarioDO->set("Pessoa_codigo", $result->get("codigo"));
		
		$result = $funcionarioBO->inserir($instanceDB, $funcionarioDO);
		
		
		
		if ( $result === FALSE ){
			$retorno = "{";
			$retorno .= "success : false,";
			$retorno .= "message : 'Não foi possível inserir as informações.'";
			$retorno .= "}";
		} else {
			$retorno .= "{";
			$retorno .= "success : true,";
			$retorno .= "message : 'Inserido com com sucesso!',";
			$dados = "";
			$aux = "";
			for ($i = 0; $i < count($result); $i++){
				$dados .= $aux . utf8_encode( $result[$i]->transformDataObjectToJSON() );
				$aux = ",";
			}
			$retorno .= "elements : [" . $dados . "]";
			$retorno .= "}";
		}
		
		return $retorno;
	}

	function excluir($instanceDB, $postRequest, $getRequest){
		
		$funcionarioBO = new FuncionarioBO();
		$pessoaBO = new PessoaBO();
		
		$funcionarioDO = new FuncionarioDO();
		$pessoaDO = new PessoaDO();
		
		$codigoFuncionario = $_POST["codigoFuncionario"];
		$pessoaDO->set( "codigo", $codigoFuncionario );
		$funcionarioDO->set( "Pessoa_codigo", $codigoFuncionario );
		
		$resultadoPessoa = $pessoaBO->excluir( $instanceDB, $pessoaDO );
		$resultadoFuncionario = $funcionarioBO->excluir( $instanceDB, $funcionarioDO );
		
		if ( $resultadoPessoa === FALSE || $resultadoFuncionario === FALSE){
			$retorno = "{";
			$retorno .= "success : false,";
			$retorno .= "message : 'Não foi possível excluir o registro.'";
			$retorno .= "}";
		}else {
			$retorno .= "{";
			$retorno .= "success : true,";
			$retorno .= "message : 'Excluído com sucesso!'";
			$retorno .= "}";
		}
		
		return $retorno;
	}
		
	function alterar($instanceDB, $postRequest, $getRequest){
		
		$funcionarioBO = new FuncionarioBO();
		$pessoaBO = new PessoaBO();
		
		$funcionarioDO = new FuncionarioDO();
		$pessoaDO = new PessoaDO();
		
		$funcionarioDO->loadDataObjectByPost( $_POST, TRUE );
		$pessoaDO->loadDataObjectByPost( $_POST, TRUE );
		
		$resultadoPessoa = $pessoaBO->alterar( $instanceDB, $pessoaDO );
		$resultadoFuncionario = $funcionarioBO->alterar( $instanceDB, $funcionarioDO );
			
		if ( $resultadoPessoa === FALSE || $resultadoFuncionario === FALSE){
			$retorno = "{";
			$retorno .= "success : false,";
			$retorno .= "message : 'Não foi possível alterar o registro.'";
			$retorno .= "}";
		}else {
			$retorno .= "{";
			$retorno .= "success : true,";
			$retorno .= "message : 'Alterado com sucesso!'";
			$retorno .= "}";
		}
		
		return $retorno;
	}
		
}
?>